const jwt = require('jsonwebtoken')
const User = require('../models/user.model')

// 认证中间件
exports.authMiddleware = async (req, res, next) => {
  try {
    // 从请求头获取token
    const authHeader = req.headers.authorization
    if (!authHeader || !authHeader.startsWith('Bearer ')) {
      return res.status(401).json({
        error: '未提供认证token'
      })
    }

    const token = authHeader.split(' ')[1]

    // 验证token
    const decoded = jwt.verify(
      token,
      process.env.JWT_SECRET || 'your-default-super-secret-key-for-dev'
    )

    // 查找用户
    const user = await User.findById(decoded.userId).select('-password')
    if (!user) {
      return res.status(401).json({
        error: '用户不存在'
      })
    }

    // 检查用户状态
    if (user.status !== 'active') {
      return res.status(403).json({
        error: '账号已被禁用'
      })
    }

    // 将用户信息添加到请求对象
    req.user = user
    next()
  } catch (error) {
    if (error.name === 'JsonWebTokenError') {
      return res.status(401).json({
        error: '无效的token'
      })
    }
    if (error.name === 'TokenExpiredError') {
      return res.status(401).json({
        error: 'token已过期'
      })
    }
    next(error)
  }
}

// 管理员权限中间件
exports.adminMiddleware = (req, res, next) => {
  if (req.user && req.user.role === 'admin') {
    next()
  } else {
    res.status(403).json({
      error: '需要管理员权限'
    })
  }
}

// 可选认证中间件（不强制要求认证，但如果提供token则验证）
exports.optionalAuthMiddleware = async (req, res, next) => {
  try {
    const authHeader = req.headers.authorization
    if (!authHeader || !authHeader.startsWith('Bearer ')) {
      return next()
    }

    const token = authHeader.split(' ')[1]
    const decoded = jwt.verify(
      token,
      process.env.JWT_SECRET || 'your-default-super-secret-key-for-dev'
    )

    const user = await User.findById(decoded.userId).select('-password')
    if (user && user.status === 'active') {
      req.user = user
    }

    next()
  } catch (error) {
    // 如果token无效，继续处理请求但不设置用户信息
    next()
  }
}